6. Tkinter. Диалоговые окна

6.1. Создание диалогового окна

Диалоговые окна, как элементы графического интерфейса, предназначены для вывода сообщений пользователю, получения от него какой-либо информации, а также управления.

Создадим свое диалоговое окно. Для примера оно создается используя несколько виджетов:

from tkinter import *

window = Tk()
window.title("Message box title")
window.geometry("300x75")
lbl = Label(window, text="My message content!")
btn = Button(window, text="Ok", width=10, command=window.destroy)
lbl.pack()
btn.pack(side=RIGHT)
window.mainloop()

Результат выполнения:

скриншот

Мы получили простейшее диалоговое окно, и хотя диалоговые окна весьма разнообразны, их вид уже устоялся. Нет необходимости создавать диалоговые окна с нуля, для это можно использовать «заготовки».

6.2. Messagebox - окно с информацией

Для информирования пользователя о процессах происходящих в ПК можно использовать Messagebox - окно с информацией. При этом требуется дополнительно импортировать «подмодуль» Tkinter - tkinter messagbox, в котором описаны классы для окон данного типа.

Код созданного информационного окна может быть следующим:

from tkinter import messagebox

messagebox.showinfo('Message title', 'Message info content')

Результат выполнения:

скриншот

Для привлечения внимания можно использовать окно предупреждения:

from tkinter import messagebox

messagebox.showwarning('Message warning title', 'Message warning content')  #shows warning message

Результат выполнения:

скриншот

Окно с возникшей ошибкой ПО думаю встречал каждый, на питоне его можно создать, написав следующий код:

from tkinter import messagebox

messagebox.showerror('Message error title', 'Message error content')    #shows error message

Результат выполнения:

скриншот

6.3. Messagebox - окно с вопросом

Следующие примеры диалоговых окон, служат для ведения диалога с пользователем и сохранением его ответа в переменной. Попробуйте создать следующие примеры диалоговых окон, подумайте об их различий и где они могут применяться? Напишите комментарий в коде к каждому диалоговому окну:

from tkinter import messagebox

res = messagebox.askquestion('Message title', 'Message ask content')
res = messagebox.askyesno('Message title', 'Message y/n content')
res = messagebox.askyesnocancel('Message title', 'Message y/n/cancel content')
res = messagebox.askokcancel('Message title', 'Message ok/cancel content')
res = messagebox.askretrycancel('Message title', 'Message retry/cancel content')

6.4. Окна открытия и сохранения файлов

Рассмотрим, как запрограммировать с помощью Tkinter вызов диалоговых окон открытия и сохранения файлов и работу с ними. При этом требуется дополнительно импортировать «подмодуль» Tkinter - tkinter.filedialog, в котором описаны классы для окон данного типа:

from tkinter import *
from tkinter.filedialog import *

root = Tk()
op = askopenfilename()
sa = asksaveasfilename()

root.mainloop()

Здесь создаются два объекта (op и sa): один вызывает диалоговое окно «Открыть», а другой «Сохранить как…». При выполнении скрипта, они друг за другом выводятся на экран после появления главного окна. Если не создать root, то оно все-равно появится на экране, однако при попытке его закрытия в конце возникнет ошибка.